2606
7031
关闭。这个问题需要细节或明确性。它当前不接受答案。
想改善这个问题吗?添加细节并通过编辑此帖子来澄清问题。
1年前关闭。
改善这个问题
我正在做一些代码挑战,我想通过指定起始索引并从起始索引仅获取第一个(3个或可以是任意长度)值来从数组中获取前三个值。
我试过了这段代码,它可以正常工作,但是代码结构太长,因此如何使它更短,以便于理解。
整数n = 10;
双重签名=新的double [] {1,1,1};
double [] ret =新的double [n];
双和= 0;
ret [0] =签名[0];
ret [1] =签名[1];
ret [2] =签名[2];
int x,i;
对于(i = 0; i 
                                
使用LINQ,您可以尝试如下操作:
var值= array.Skip(索引)
。取(n)
.ToArray();
其中index是第一个项目的索引,n是要选择的项目数。
例如。 https://dotnetfiddle.net/Pk1rwY
作为旁注。使用LINQ并不意味着您的代码会更快。它将更加紧凑/可读,等等。为了评估代码的性能,您必须使用BenchmarkDotNet之类的东西。
|
没有Linq解决方案:
私有静态T [] Extract (T []源,int fromIndex,int长度){
如果(null ==源)
抛出新的ArgumentNullException(nameof(source));
否则(fromIndex <0)
抛出新的ArgumentOutOfRangeException(nameof(fromIndex),
“ From Index必须为非负数”);
否则(长度<0)
抛出新的ArgumentOutOfRangeException(nameof(length),
“长度必须为非负数”);
if(fromIndex> = source.Length || length == 0)
返回新的T [0];
T []结果=新的T [Math.Min(length,source.Length-fromIndex)];
Array.Copy(source,fromIndex,result,0,result.Length);
返回结果;
}
然后
double []签名=新的double [] {0,1,2,3,4,5};
double [] ret = Extract(签名,3,2);
Console.Write(string.Join(“,”,ret));
结果:
3 4
|
根据您的问题,您需要利用.Take和.Skip运算符。
var result = array.Skip(startingIndex).Take(numberOfElements);
因此,从您的代码看来,您正在尝试做一些不同的事情,即求和元素。 .Sum运算符可能对您有帮助。
|
不是您要找的答案?浏览标记为c#数组linq的其他问题,或询问您自己的问题。